require 'json'
require_relative 'constant'
require_relative 'util'
require_relative 'name_container'

module LiJia
module SolidName

  # 功能入口
  # 创建html对话框
  def self.create_dialog
    options = {
      :dialog_title => "批量修改实体名称  chaidan.net",
      :preferences_key => "lijia.solidname",
      :width => 400,
      :height => 600,
      :style => UI::HtmlDialog::STYLE_DIALOG
    }
    @dialog = UI::HtmlDialog.new(options)

    @dialog.set_file(File.join(__dir__, '../html', 'list.html'))
    @dialog.center
    @dialog.show

    # 回调函数。向htmlDialogue发送name_pair_list
    # 此方法在html页面加载完毕后，才被调用
    # change_mode: 已何种方式更改名称。默认用实体的图层名覆盖其实例名
    @dialog.add_action_callback('get_name_pair_list') { |action_context, change_mode|
      LiJia::SolidName::NameContainer.instance.init_container(change_mode)  # 1. 准备要更改的源名称和目的名称
      @dialog.execute_script("setNameContainer(#{LiJia::SolidName::NameContainer.instance.to_json});")
      nil
    }

    # 回调函数。接收用户确认的修改名称，并执行修改
    @dialog.add_action_callback('update_names') { |action_context|
      update_names()
      nil
    }
  end

  # 执行更改名称的操作
  def self.update_names()
    # 获得所有可见的实体（组件/群组）
    ents = Sketchup.active_model.entities.select{|entity| entity.visible? && LiJia::SolidName.is_solid?(entity)}

    Sketchup.active_model.start_operation("批量修改名称", true)

    ents.each{|level_1_solid| 
      level_2_solids = level_1_solid.definition.entities.select{|sub_ent| 
        sub_ent.visible? && LiJia::SolidName.is_solid?(sub_ent)
      }
      level_2_solids.each{|level_2_solid|
        new_name = LiJia::SolidName::NameContainer.instance.get_namepair(level_2_solid.persistent_id).source_name
        level_2_solid.name = new_name if new_name != nil
      }
    }

    @dialog.close
    Sketchup.active_model.commit_operation
  end

end # module SolidName
end # module LiJia  